<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			class NewPromise {
				constructor(fn) {
					this.successList = []; //成功的事件函数存放在这里
					this.failList = []; //失败的事件函数存放在这款
					//进行中
					this.state = "pending"
					//成功的状态 fullfilled
					//失败的状态 rejected
					fn(this.resolveFn.bind(this), this.rejectFn.bind(this)); //调用一个判断成功/还是失败的函数
				}
				//成功，失败的参数，then调用的函数
				then(successFn, failFn) {
					console.log("进入then")
					if (typeof successFn == "function") {
						console.log("把成功的事件存放道一个数组中")
						//如果是一个函数，并且把成功的函数存放在这个数组中
						this.successList.push(successFn)
						//console.log("打印成功数据："+successFn)//.then请求到的
					}
					//失败的操作
					if (typeof failFn == "function") {
						this.failList.push(failFn)
					}
				}
				//失败抛出异常
				catch (failFn) {
					if (typeof failFn == 'function') {
						this.failList.push(failFn)
					}
				}
				//成功执行的函数,, .then去获取这里的数据
				resolveFn(res) {
					console.log("执行成功的函数，把每一个成功的item遍历输出")
					this.state = "fullfilled"; //成功的时候重置为fullfilled
					this.successList.forEach((item, index) => {
						//将成功的事件
						console.log(res)
						console.log(item)//这个时候还没有成功的数据，所以继续往下走
						item(res)
					})
				}
				//失败的函数
				rejectFn(res) {
					this.state = "rejected" //失败的时候重置为rejected
					//将注册的失败事件进行调用
					this.failList.forEach((item, index) => {
						item(res)
					})
					throw Error(res);

				}
			}

			var p=new NewPromise(function fn(resolve,reject){
				setTimeout(()=>{
					if(true){
						resolve("我是成功的数据");//调用成功执行的函数
						console.log("获取到成功数据")
					}else{
						reject("我是失败的数据")//调用失败执行的函数
					}
				},1000)
			})
			//通过then访问Promise中的值和数据
			p.then((res)=>{
				console.log("输出请求成功结果："+res)
				
			})
		
		</script>
	</body>
</html>
